iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Modern Web

用 Node.js 打造後端 API系列 第 5

Day 05 - 進階搜尋結果

  • 分享至 

  • xImage
  •  

前言


在前面的GET請求中,我們只能一次性地拿到全部bootcamps的資料或特定ID的資料
但使用者可能會依自身的需求與條件來選擇適合自己的bootcamp
以下將是示範如何透過filtering來取得資料

Filtering


在'./controllers/bootcamps'中,找到getBootcamps函式

// Implement basic filtering

let queryStr = JSON.stringify(req.query);

let query = Bootcamp.find(JSON.parse(queryStr));

const bootcamps = await query;

只要使用者輸入能對應到資料庫中的key value pair,伺服器就會回傳相對應的資料,如下圖
https://ithelp.ithome.com.tw/upload/images/20220913/20151654ukTEWRVNd6.png

進階Filtering


在之後的文章中,我們會用Bootcamp model reference 其他組資料(courses)
一組bootcamp會對應到多筆courses的資料像是tuition,那我們就能利用tuition來計算該組bootcamp的平均學費為多少
一樣在getBootcamps函式中

// Implement advanced filtering

let queryStr = JSON.stringify(req.query);

queryStr = queryStr.replace(/\b(gt|gte|lt|lte|in)\b/g, match => `$${match}`);

let query = Bootcamp.find(JSON.parse(queryStr));

const bootcamps = await query;

第三行的queryStr使用到了MongoDB的Comparison Query Operators
假設使用者要搜尋平均學費小於或等於10000的bootcamp,可以在req.query輸入:

averageCost[lte]=10000

上一篇
Day 04 - 自訂錯誤處理函式
下一篇
Day 06 - 進階搜尋結果2
系列文
用 Node.js 打造後端 API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言